#include "cdcelecenermeter.h"

CDCElecEnerMeter::CDCElecEnerMeter(QObject *parent) : QSerialPort(parent)
{
    paraInit();
    connect(this,&CDCElecEnerMeter::readyRead,this,&CDCElecEnerMeter::dealRec);
}

CDCElecEnerMeter::CDCElecEnerMeter(const QSerialPortInfo &serialPortInfo, QObject *parent):QSerialPort(serialPortInfo,parent)
{
    paraInit();
    connect(this,&CDCElecEnerMeter::readyRead,this,&CDCElecEnerMeter::dealRec);
}

CDCElecEnerMeter::CDCElecEnerMeter(const QString &strPortName, QSerialPort::BaudRate baud, QObject *parent)
{
    this->setParent(parent);
    paraInit();
    this->setPortName(strPortName);
    this->setBaudRate(baud);
    connect(this,&CDCElecEnerMeter::readyRead,this,&CDCElecEnerMeter::dealRec);
}

float CDCElecEnerMeter::getCurrentEner() const
{
    return _currentEner;
}

float CDCElecEnerMeter::getInitialEner() const
{
    return _initialEner;
}

void CDCElecEnerMeter::setInitialEner(float initialEner)
{
    _initialEner = initialEner;
}

void CDCElecEnerMeter::paraInit()
{
    this->_currentEner=0.0f;
    this->_initialEner=0.0f;
}

void CDCElecEnerMeter::dealRec()
{
#if 0
    QByteArray text = QByteArray::fromHex("517420697320677265617421");
    qDebug()<<"fromHex"<<text.data(); // r
    qDebug()<<"fromHex"<<text; // r
    qDebug()<<"fromHex"<<QString::number(text[0],16)<<QString::number(text[1],16)<<text[2]<<text[3]; //

    QString str=text;
#endif

    //if(!this->canReadLine()) return;
    if(this->bytesAvailable()<24)  return;
    //读取串口数据
    QByteArray readComData = this->readAll();
    //将读到的数据显示到数据接收区
    if(readComData != NULL)
    {
        //电能报文FE FE FE FE 68 72 56 12 11 17 00 68 91 08 33 33 34 33 BB 44 33 33 9D 16  =》 33 33 34 33 7B 44 33 33 =（倒-33）  00 00 11 48 00 01 00 00=》能量11.48Kw
        readComData=readComData.toHex().toUpper(); //转化为十六进制
        int fIndex=readComData.indexOf("91");
        //qDebug()<<"fromHex"<<fIndex<<readComData.indexOf("91"); //得到24  处理成字符串
        if(fIndex==-1) return;
        if(readComData.count()-2-fIndex>9*2 && readComData.mid(fIndex+2,2)=="08" && readComData.mid(fIndex+4,2)=="33" && readComData.mid(fIndex+6,2)=="33" && readComData.mid(fIndex+8,2)=="34"&&readComData.mid(fIndex+10,2)=="33")
        {
            //qDebug()<<tr("rec12222--------------------------------");
            QByteArray Data=readComData.mid(fIndex+12,4*2);

            //qDebug()<<"enenr:"<<Data<<Data.count();  //7b443333
            QString str=Data;

            for(int i=0;i<str.length();i++)
            {
                //判断 每个字符都是大于3的
                int num=str.mid(i,1).toInt(nullptr,16)-3;
                if(num < 0 || num > 9) return;
                str.replace(i,1,QString::number(num,10));
            }

            //qDebug()<<str<<str.length();
            //qDebug()<<QString::number(Data.at(0)-'3',10);
            _currentEner=str.mid(0,2).toInt()+str.mid(2,2).toInt()*100+str.mid(4,2).toInt()*10000+str.mid(6,2).toInt()*1000000;
            _currentEner/=100.0;
            qDebug()<<"enenr:"<<_currentEner;
        }
         emit signalGetReady(); //接受一次有效数据就发送一次信号
    }
    //清除缓冲区
    //readComData.clear();

}




/*
            qDebug()<<QString::number( Data.mid(0,2).toInt(nullptr,16)-0x33,16);
            qDebug()<<QString::number(0x32-0x33,16);
            QString str1;
            for(int i=0;i<4;i++)
            {
                //str1.append(QString::number( Data.mid(i*2,2).toInt(nullptr,16)-0x33,16));
            }
            str1.append(QString::number( Data.mid(0,2).toInt(nullptr,16)-0x33,16));
            str1.append(QString::number( Data.mid(2,2).toInt(nullptr,16)-0x33,16));
            str1.append(QString::number( Data.mid(4,2).toInt(nullptr,16)-0x33,16));
            str1.append(QString::number( Data.mid(6,2).toInt(nullptr,16)-0x33,16));

            qDebug()<<str1;
*/



